package com.fzn.mybatis_plus.config;

/**
 * @program: mybatis_plus
 * 描述：
 * @author: fzn
 * @create: 2021-11-17 14:57
 **/

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.transaction.annotation.EnableTransactionManagement;

/**
 * 配置类
 * @author Fanzhineng
 */
@EnableTransactionManagement
@Configuration
@MapperScan("com.fzn.mybatis_plus.mapper")
public class MybatisPlusConfig {
    /**
     * 乐观锁插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 逻辑删除
     * @return
     */
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

    /**
     * SQL 执行性能分析插件  会生成sql
     * 开发环境使用，线上不推荐。 maxTime 指的是 sql 最大执行时长
     *
     * // 设置 dev test 环境开启
     */
    // @Bean
    // @Profile({"dev","test"})
    // public PerformanceInterceptor performanceInterceptor() {
    //     PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
    //     //ms，超过此处设置的ms则sql不执行  超出时间不执行  超出会报错
    //     performanceInterceptor.setMaxTime(100);
    //     performanceInterceptor.setFormat(true);
    //     return performanceInterceptor;
    // }
}